nwnfandomcom-20200213-history
Scripts (Shayan's Subrace Engine)
Shayan's Subrace Engine features several scripting enhancements. Scripts sha_subr_methds Functions CreateSubrace() ALL SUBRACE RELATED METHODS MUST BE CALLED AFTER THIS METHOD! The Main function. Call this OnModuleLoad. Syntax: void CreateSubrace(int Race, string subrace, string HideResRef = "", string UniqueItemResref = "", int IsLightSensitive = FALSE, int DamageTakenWhileInLight = 0, int IsUndergroundSensitive = FALSE, int DamageTakenWhileInUnderground = 0, int ECL = 0, int IsUndead = FALSE, int PrestigiousSubrace = FALSE) int Race: This is the base race that you want to create your subrace from Use ONLY: RACIAL_TYPE_ALL, or RACIAL_TYPE_DWARF, RACIAL_TYPE_ELF, RACIAL_TYPE_GNOME, RACIAL_TYPE_HALFELF, RACIAL_TYPE_HALFLING, RACIAL_TYPE_HALFORC, or RACIAL_TYPE_HUMAN. If you want to add additional races that can become part of this subrace call AddAdditionalBaseRaceToSubrace() AFTER this method. string subrace: The subrace's name. This is what the PC will have to type in his/her Subrace field. DO NOT HAVE SPACES IN NAMES. IE: Use "Dark-elf" NOT "Dark elf". (Not case sensitive.) string HideResRef: This is the resref of the Creature Hide/Skin you want to equip on the PC. This will have all the subrace traits like ability modifiers and base feats etc. If you do not want a skin, write either "none" or leave it as blank. string UniqueItemResref: This is the resref of the item that you want given to the player. For example this item could hold can spells on it, or just description of the subrace. Ideally this item will not be droppable, and is marked as being a plot item. Regardless of what type of item this is it will be given to player when they enter the module. (If they lose it or drop it they will again get it back on the next time they enter). If you do not want to give the PC a unique item then, write either "none" or leave it as blank. int IsLightSensitive: Set to TRUE if the subrace is light senstive. IE: Blinded when in Sunlight and/or gets saves and AB decreases. If the PC does not pass the fort saving throw, then it is blinded for that round. The DC for the saving throw can be changed by changing the value of LIGHT_SENSITIVE_SAVING_THROW_DC in the file sha_subr_consts. Also you can change the interval (rounds) between each time the PC is 'struk' by light by changing the value of LIGHT_BLINDNESS_STRIKES_EVERY_ROUND. And also you can change the number of rounds the PC stays blinded for if it fails the saving throw by changing tha value of LIGHT_STRUCK_BLIND_FOR_ROUNDS. If APPLY_AB_AND_SAVING_THROW_DECREASES_IN_LIGHT is set to TRUE, then the PC also suffers an attack bonus decrease of LIGHT_AB_DECREASE and saving throw decrease of LIGHT_SAVE_DECREASE for a number of rounds determined by: LIGHT_CAUSES_AB_AND_SAVES_DECREASE_FOR_ROUNDS. Rememeber: IF YOU CHANGE ANYTHING IN THE CONSTANTS FILE, IT WILL APPLY TO ALL SUBRACES. (IE: If you change the DC for the saving throw then all subraces that have light sensitivity will have to make that saving throw). int DamageTakenWhileInLight: The amount of divine Damage the PC suffers ever round while it is in sunlight. Note: PC does not necessarily have to be Light Sensitive for this to work. If this value is negative then the PC will regenerate that amount. int IsUndergroundSensitive: Same as IsLightSenstive but this applies when the PC is in Underground type of areas. This does not mean the PC is affected by Night time. int DamageTakenWhileInUnderground: The amount of Negative Damage taken per round while in the Underground. Note: This too doesn't need the PC to be Under ground sensitive to apply. If this value is negative then the PC will regenerate that amount. int ECL: Effective Character Level: Use any integer value. (For those that do not know what this is... Effective Character Level is a way of lessening your subrace's bonus abilities by reducing the amount of experience points gained per kill.) IE: If you have a Subrace with ECL of 3, then a PC (Player character) of level 10 belonging to that subrace is regarded being level 13 when gaining XP points per kill. Thus will get less experience points. NOTE: This can work for negative values as well. int IsUndead: Mark the PC belonging to this sub-race as being Undead. It will mean that Healing spells will hurt the PC. Harming spells will heal the PC. int PrestigiousSubrace: Mark this sub-race as being prestigious. Which means players can't become part of it when they enter in with a level 1 character with this as their chosen subrace. (Set this to TRUE, if you are making a subrace that players can become part of once they reach a certain level in another sub-race) -Refer to SetupSubraceSwitch() for more information - Example: You wish to create a subrace called Drow, and you have created a Creature Skin/Hide in the toolset with resref "sha_pc_drow". The Unique item (which contains spell like abilities and information about the Drow subrace) has the resref "sha_subrace_drow". And you want to make the Drow light sensitive and take 2 divine damage while in light areas. Also you would like to mark the Drow as having an Effective Character level of +1. Simply call this OnModuleLoad. (Remember to #include "sha_subr_methds", in the script) CreateSubrace(RACIAL_TYPE_ELF, "drow", "sha_pc_drow", "sha_subrace_drow", TRUE, 2, FALSE, 0, 1); AddAdditionalBaseRaceToSubrace() Add another Race that can be part of the subrace. Syntax: void AddAdditionalBaseRaceToSubrace(string subrace, int AdditionalBaseRace) string subrace should be the same as the Subrace's name used in CreateSubrace() int AdditionalBaseRace can only be RACIAL_TYPE_ALL, RACIAL_TYPE_DWARF, RACIAL_TYPE_ELF, RACIAL_TYPE_GNOME, RACIAL_TYPE_HALFELF, RACIAL_TYPE_HALFLING, RACIAL_TYPE_HALFORC, or RACIAL_TYPE_HUMAN. CreateSubraceClassRestriction() Limit the classes the PC can be, when trying to be part of this subrace. Syntax: void CreateSubraceClassRestriction(string subrace, int CanBe_Barbarian = TRUE, int CanBe_Bard = TRUE, int CanBe_Cleric = TRUE, int CanBe_Druid = TRUE, int CanBe_Fighter = TRUE, int CanBe_Monk = TRUE, int CanBe_Paladin = TRUE, int CanBe_Ranger = TRUE, int CanBe_Rogue = TRUE, int CanBe_Sorcerer = TRUE, int CanBe_Wizard = TRUE); string subrace should be the same as the Subrace's name used in CreateSubrace() int CanBe_* Set the CanBe_ values as desired. Note: This will only check PC's first class. IE: You limit your subrace's classes to only Fighter and Rogue A player with classes Wizard/Fighter/Cleric will not meet the criteria, nor will a Monk/Cleric/Rogue. Only a PC with either Rogue or Fighter as their first class will meet the requirement. IE: Rogue/WeaponMaster or Fighter/Wizard/Cleric. CreateSubraceAlignmentRestriction() Limit the Alignment the PC can be, when trying to be part of this subrace. Note this alignment restriction only applies when the PC enters the module for the first time. (A database entry is made). IE: It will not stop the PC from being part of the subrace after the PC adventures and changes in alignment. Syntax: void CreateSubraceAlignmentRestriction(string subrace, int CanBeAlignment_Good = TRUE , int CanBeAlignment_Neutral1 = TRUE, int CanBeAlignment_Evil = TRUE, int CanBeAlignment_Lawful = TRUE, int CanBeAlignment_Neutral2 = TRUE, int CanBeAlignment_Chaotic = TRUE); string subrace should be the same as the Subrace's name used in CreateSubrace() int CanBe_* Set the CanBe_ to as desired. CreateSubraceSpellResistance() Use this method of Spell resistance if you want the Spell resistance to increase (or decrease) with the PC's level. Syntax: void CreateSubraceSpellResistance(string subrace, int SpellResistanceBase, int SpellResistanceMax); string subrace should be the same as the Subrace's name used in CreateSubrace() int SpellResistanceBase: Is the vaule of SR the PC gains at level 1 int SpellResistanceMax: Is the value of the SR PC gains at the maximum level achievable (default is 40, you can change the maximum level value in "sha_subr_consts") CreateSubraceAppearance() Use this method if you want the PC's Appearance to change for the subrace. Syntax: void CreateSubraceAppearance(string subrace, int AppearanceChangeTime, int MaleAppearance, int FemaleAppearance, int Level = 1); string subrace should be the same as the Subrace's name used in CreateSubrace() int AppearanceChangeTime: Time of day you want the Appearance to change. if you want to have a permanent appearance change then use: TIME_BOTH. if you want the appearance to only change when it is night time and revert back when it is day time then use: TIME_DAY. if you want the appearance to only change when it is day time and revert back to the PC's original form when it is night time then use: TIME_NIGHT. if you plan on making a controlable appearance, then set to TIME_NONE. (Refer to manual for more information) int MaleAppearance: This is the appearance of a Male PC. Use any of the APPEARANCE_TYPE_* values. int FemaleAppearance: This is the appearance of a Female PC. Use any of the APPEARANCE_TYPE_* values. int Level: From which level to apply this appearance change from... NOTE: Not all APPEARANCE_TYPE_* constants work in standard NWN. IE: If you use APPEARANCE_TYPE_WYRMLING_BLACK, and you only have installed just NWN (no expansions), then your appearance will be different... (in the case of wyrmiling, you will look like a mephit) - You have been warned. CreateTemporaryStatModifier() Use this method if you want the PC's ability scores or AC or AB to change when it is either day or night. You may use this twice per subrace. Once for TIME_DAY, and once for TIME_NIGHT. Syntax: void CreateTemporaryStatModifier(string subrace, struct SubraceStats Stats, int TimeToApply, int InInteriorArea = TRUE, int InExteriorArea = TRUE, int InNaturalArea = TRUE, int InArtifacialArea = TRUE, int InUndergroundArea = TRUE, int InAbovegroundArea = TRUE); string subrace: Should be the same as the Subrace's name used in CreateSubrace() struct SubraceStats Stats: (Explained below) int TimeToApply: if you want the stats/ability scores to only change when it is night time and revert back when it is day time then use: TIME_NIGHT. if you want the stats/ability scores to only change when it is day time and revert back to the PC's original stats/ability scores when it is night time then use: TIME_DAY. InInteriorArea: Set to TRUE if you want these changes to ability scores to happen in Interior Areas. InExteriorArea: Set to TRUE if you want these changes to ability scores to happen in Exterior Areas. InNaturalArea: Set to TRUE if you want these changes to ability scores to happen in Natural Areas. InArtifacialArea: Set to TRUE if you want these changes to ability scores to happen in Artifical Areas. InUndergroundArea: Set to TRUE if you want these changes to ability scores to happen in Underground Areas. InAbovegroundArea: Set to TRUE if you want these changes to ability scores to happen in Above Ground Areas. Example: First create a structure of SubraceStats. It can be done by: struct SubraceStats mystats = CreateCustomeStats(). then you want to add this to your subrace. So call CreateTemporaryStatModifier("mysubrace", mystats, TIME_DAY, TRUE, FALSE); Hence the PC belonging to "mysubrace" will have it's ability scores changed during day time, when they are in Exterior (IE: outdoors) areas. CreateCustomStats() This is the first half of CreateTemporaryStatModifier function. Syntax: struct SubraceStats CreateCustomStats(int StatModifierType, float StrengthModifier, float DexterityModifier, float ConstitutionModifier, float IntelligenceModifier, float WisdomModifier, float CharismaModifier, float ACModifier, float ABModifier); StatModiferType: Use only SUBRACE_STAT_MODIFIER_TYPE_PERCENTAGE (if you wish to increase or decrease a PC's ability scores/AC/AB based on the percentage of the PC's current ability scores) or SUBRACE_STAT_MODIFIER_TYPE_POINTS (if you wish to increase or decrease a PC's ability scores/AC/AB by constant number. Modifier Fill in the values of the floats appropriately. Example: You wish to change reduce the PC's strength by 80% and increase it's dexterity by 50% and increase it's consitituion by 60%, whilst you want to increase the AC by 65%, but reduce the AB by 10%. so you create your stats: struct SubraceStats mystats = CreateCustomStats(SUBRACE_STAT_MODIFIER_TYPE_PERCENTAGE, -0.80, 0.50, 0.60, 0.0, 0.0, 0.0, 0.65, -0.10); You then use this in CreateTemporaryStatModifier(). SubraceRestrictUseOfItems() Restricing the use of Items (both weapons and armour) for a given subrace. Use this for each of the four TimeOfDay you want. (TIME_DAY, TIME_NIGHT, TIME_SPECIAL_APPEARANCE_NORMAL and TIME_SPECIAL_APPEARANCE_SUBRACE) Syntax: void SubraceRestrictUseOfItems(string subrace, int ItemType, int TimeOfDay = TIME_BOTH, int Allow = ITEM_TYPE_REQ_DO_NOT_ALLOW); ItemType should be a mix of the following (mix them by using | ): --------- Weapon Restrictions --------- - ITEM_TYPE_WEAPON_MELEE - Melee Weapons (incl. Monk Gloves) Does NOT include Bracers. - ITEM_TYPE_WEAPON_RANGED_THROW - Ranged Weapons (Throwing Weapons) - ITEM_TYPE_WEAPON_RANGED_LAUNCHER - Ranged Weapons (Launchers) Does "incl." Ammonition (Ammo can still be equipped but is not usable) - ITEM_TYPE_WEAPON_RANGED - Ranged Weapons (Both Launchers and Throwing) - ITEM_TYPE_WEAPON - All Weapons (Both Ranged and Melee) - ITEM_TYPE_WEAPON_PROF_SIMPLE - Simple Weapons - ITEM_TYPE_WEAPON_PROF_MARTIAL - Martial Weapons - ITEM_TYPE_WEAPON_PROF_EXOTIC - Exotic Weapons - ITEM_TYPE_WEAPON_PROF_ANY - All Weapon Prof. - ITEM_TYPE_WEAPON_SIZE_TINY - Tiny Weapons - ITEM_TYPE_WEAPON_SIZE_SMALL - Small Weapons - ITEM_TYPE_WEAPON_SIZE_MEDIUM - Medium Weapons - ITEM_TYPE_WEAPON_SIZE_LARGE - Large Weapons - ITEM_TYPE_WEAPON_SIZE_SMALL_DOWN - All Small or smaller Weapons (Small, Tiny) - ITEM_TYPE_WEAPON_SIZE_MEDIUM_UP - All Medium or Larger Weapons (Medium, Large) - ITEM_TYPE_WEAPON_SIZE_ANY - All Weapon Sizes. --------- Armour, Helm and Shield Restrictions --------- - ITEM_TYPE_SHIELD_SMALL - Small Shields - ITEM_TYPE_SHIELD_LARGE - Large Shields - ITEM_TYPE_SHIELD_TOWER - Tower Shields - ITEM_TYPE_SHIELD_ANY - All Shields. - ITEM_TYPE_ARMOR - Torso Armour Only (AC 0-8) - ITEM_TYPE_ARMOR_TYPE_CLOTH - Cloth Torso Armour only (AC 0) - ITEM_TYPE_ARMOR_TYPE_LIGHT - Light Torso Armour only (AC 1-3) - ITEM_TYPE_ARMOR_TYPE_MEDIUM - Medium Torso Armour only (AC 4-6) - ITEM_TYPE_ARMOR_TYPE_HEAVY - Heavy Torso Armour only (AC 7-8) - ITEM_TYPE_ARMOR_AC_0 - Torso Armour with 0 AC - ITEM_TYPE_ARMOR_AC_1 - Torso Armour with 1 AC - ITEM_TYPE_ARMOR_AC_2 - Torso Armour with 2 AC - ITEM_TYPE_ARMOR_AC_3 - Torso Armour with 3 AC - ITEM_TYPE_ARMOR_AC_4 - Torso Armour with 4 AC - ITEM_TYPE_ARMOR_AC_5 - Torso Armour with 5 AC - ITEM_TYPE_ARMOR_AC_6 - Torso Armour with 6 AC - ITEM_TYPE_ARMOR_AC_7 - Torso Armour with 7 AC - ITEM_TYPE_ARMOR_AC_8 - Torso Armour with 8 AC - ITEM_TYPE_HELM - Helms - ITEM_TYPE_FULL_ARMOR_SET - All Armours, Shields and Helms. --------- Misc. Restrictions --------- - ITEM_TYPE_JEWLERY - Rings and Amulets - ITEM_TYPE_MISC_CLOTHING - None-Torso clothing (Cloak, Braces, Boots) Does NOT include Jewlery - ITEM_TYPE_NONE_BIOWARE_ITEM - ALL None Standard Bioware Items (e.g. CEP Items) TimeOfDay should either be any mix of TIME_DAY,TIME_NIGHT, TIME_BOTH for time-based restrictions OR a mix of TIME_SPECIAL_APPEARANCE_SUBRACE, TIME_SPECIAL_APPEARANCE_SUBRACE for appearance-based restrictions. Appearance-based will override Time-based in case of conflict! Allow should be a mix of the follow constants: - ITEM_TYPE_REQ_ALL - Must meet ALL requirements (applies to Weapons-req. only) e.g. only weapons that are Large Weapons AND Simple Weapons can be used - ITEM_TYPE_REQ_ANY - Must just meet one of the requirements e.g. Large Weapons or simple weapons can be used. - ITEM_TYPE_REQ_DO_NOT_ALLOW - Subrace CANNOT use ItemType during TimeOfDay (input is reversed) AddSubraceFavoredClass() Add a favored class to the subrace. Use this only ONCE per subrace. It will not work correctly if used more than once per subrace This would mean that when determining XP penalty for multiclassing, the favored classes do not apply when determining it Works the same way as default NWN favored classes. (This will work ONLY if you are using the attached Shayan's XP System script). Syntax: void AddSubraceFavoredClass(string subrace, int MaleFavoredClass, int FamaleFavoredClass); NOTE: You can use any playable base CLASS_TYPE_* constant. Do NOT USE Prestige classes, as they are not taken into consideration when determining multiclassing penalty by NWN. Also if you do specify a prestige class it will end up giving players a 20% boost to the XP gained. AddSubraceEffect() Add a permanent or a temporary subrace effect on the PC, during day or night or permanently. Use as many times as desired. Syntax: void AddSubraceEffect(string subrace, int EffectID, int Value1, int Value2, int nDurationType, float fDuration, int TimeOfDay); subrace: Should be the same as the Subrace's name used in CreateSubrace() EffectID: There are a limited number of effects you can use here... EFFECT_TYPE_ARCANE_SPELL_FAILURE EFFECT_TYPE_BLINDNESS EFFECT_TYPE_CHARMED EFFECT_TYPE_CONCEALMENT EFFECT_TYPE_CONFUSED EFFECT_TYPE_CUTSCENEGHOST EFFECT_TYPE_HASTE EFFECT_TYPE_IMMUNITY EFFECT_TYPE_IMPROVEDINVISIBILITY EFFECT_TYPE_INVISIBILITY EFFECT_TYPE_MISS_CHANCE EFFECT_TYPE_MOVEMENT_SPEED_DECREASE EFFECT_TYPE_MOVEMENT_SPEED_INCREASE EFFECT_TYPE_POLYMORPH EFFECT_TYPE_REGENERATE EFFECT_TYPE_SANCTUARY EFFECT_TYPE_SLOW EFFECT_TYPE_TEMPORARY_HITPOINTS EFFECT_TYPE_TRUESEEING EFFECT_TYPE_ULTRAVISION EFFECT_TYPE_VISUALEFFECT Value1: This is the value of the first parameter (from left) that you can input for the effect. IE: If you choose EFFECT_TYPE_CONCEALMENT, which means the effect applied will be: EffectConcealment(int nPercentage, int nMissType=MISS_CHANCE_TYPE_NORMAL) Thus Value1 will be the value of nPercentage. YOU MUST INPUT A VALUE! IF NOT THE SCRIPT WILL PUT IN 0!! Value2: This is the value of the second parameter you can input for the effect. IE: (Refer to Value1's example) This will be the value of nMissType. YOU MUST INPUT A VALUE! IF NOT THE SCRIPT WILL PUT IN 0!! nDurationType: Duration type of the effect being applied... DURATION_TYPE_INSTANT, DURATION_TYPE_PERMANENT, or DURATION_TYPE_TEMPORARY. fDuration: The number of seconds the effect should last for... (Put 0.0 if you are making it last "forever" -IE: Whole of day time, or night time or permanetly) TimeOfDay: The time of day you want this applied. Use TIME_BOTH if you want this permanently applied on the PC. AddAdditionalSkinsToSubrace() Add a different skin to the subrace at specified level. (Use as many times as desired) Use as many times as desired. Syntax: void AddAdditionalSkinsToSubrace(string subrace, string SkinResRef, int EquipLevel, int iTime = TIME_BOTH); subrace: Should be the same as the Subrace's name used in CreateSubrace() SkinResRef: The Blueprint ResRef of the skin that you want the subrace to be equipped. EquipLevel: The level at which you want the skin to be applied. iTime: The time at which you want the skin to be equipped. (Use TIME_DAY, TIME_NIGHT, or TIME_BOTH.) Example: You want to add a skin for the subrace Illithid to use at level 15, during day time. Then call onModuleLoad script: AddAdditionalSkinsToSubrace("Illithid", "my_illithid_skin", 15, TIME_DAY); (Where "my_illithid_skin" is the resref of the skin you want equipped.) Note: If you say add a skin for a subrace to be equipped at level 15, then all PCs belonging to the subrace above level 15 will also use the same skin for that time -unless you add a different skin for those levels.) AddClawsToSubrace() Add equipable creature claws to the subrace. This allows you to add 'Claws' to your subrace. You simply specify the Blue print resref of the claw you want equipped on the player, and at what level. Use as many times as desired. (You can use this to equip claws/slams/gore or what ever else that maybe equipped in a PC's claw item slots) Syntax: void AddClawsToSubrace(string subrace, string RightClawResRef, string LeftClawResRef , int EquipLevel, int iTime = TIME_BOTH); subrace: Should be the same as the Subrace's name used in CreateSubrace() RightClawResRef: The resref of the right hand claw. (Use "" if you do not want to specify a claw, use "none" if you want any existing right claws to be removed from the player.) LeftClawResRef: The resref of the left hand claw. (Use "" if you do not want to specify a claw, use "none" if you want any existing right claws to be removed from the player.) EquipLevel: The level at which these claws should be equipped. NOTE: 1. Make sure the PCs have weapon proficiency in creature weapons!!! I can't stress this enough. (Give the feat through the subrace Skin) 2. If you are going to use one claw, make sure it is the right claw. 3. Also note that you need not change both claws at once. (IE: Say you equipped a right and left claw at level 5, then say at level 10, if you want to change the left claw then you only need to specify the resref of the left claw... the PC keeps the existing right claw.) SetupSubraceSwitch() Switch the player from one subrace to another This allows you to switch a player from one subrace to another. (Use only once per Level) Syntax: void SetupSubraceSwitch(string subrace, string switchSubraceName, int Level, int MustMeetRequirements = TRUE); subrace: Should be the same as the Subrace's name used in CreateSubrace() switchSubraceName: The syntax of the subraces, you wish to switch the player (Should be the same as whatever the new subraces' name used in it's CreateSubrace()) Level: The level at which this switch should take place. MustMeetRequirements: Set to FALSE, if you want the switching to bypass any class/race/alignment restriction the new subrace might have. If MustMeetRequirements set to TRUE, and the character fails to meet a requirement... then they will continue on as part of their current sub-race. IDEA: You can set the subrace you want the player to switch to as a hidden and unaccessible subrace for new characters, by setting PrestigiousSubrace to TRUE, in CreateSubrace(). That way, players must earn their way to this new subrace (switchSubraceNames). Example: IE: If I had set up three subraces like: CreateSubrace(RACIAL_TYPE_HUMAN, "illithid", "sha_pc_illithid", "sha_subrace_illi", TRUE, 0, FALSE, 0, 3); (Along with other setting for subrace, like class restrictions, appearance, additional skins, etc) CreateSubrace(RACIAL_TYPE_HUMAN, "vampire", "sha_pc_vamp001", "sha_subrace_vamp", TRUE, 2, FALSE, 0, 3, TRUE); Can only be evil. CreateSubraceAlignmentRestriction("vampire", FALSE, FALSE, TRUE); (Along with other setting for subrace, like class restrictions, appearance, additional skins, etc) CreateSubrace(RACIAL_TYPE_HUMAN, "wolkier", "sha_pc_wolk", "sha_subrace_wolk", TRUE); Can only be Neutral;. CreateSubraceAlignmentRestriction("wolkier", FALSE, TRUE, FALSE); (Along with other setting for subrace, like class restrictions, appearance, additional skins, etc) And I wished that PCs belonging to illithid be switched to vampire or wolkier at level 15, depending on which criteria they meet, then I would call: SetupSubraceSwitch("illithid", "vampire_wolkier", 15, TRUE); If I didn't want the alignment criteria to be check during switching then I would call: SetupSubraceSwitch("illithid", "vampire_wolkier", 15, FALSE); The order in which you choose the subrace to be switched is important. If the player can meet both requirements, it gives prioirty to the first one. You can put in any number of subraces to switch to.. IE: SetupSubraceSwitch("illithid", "vampire_wolkier_pixie_shadow", 8, TRUE); If a player doesn't meet the criteria for any one of the subraces, he/she wil remain part of thier usual/current subrace. You can use SetupSwitchSubrace() as many times as you like. EG: SetupSubraceSwitch("illithid", "vampire_wolkier_pixie_shadow", 12, TRUE); SetupSubraceSwitch("illithid", "air-genasi_underminion", 18, TRUE); SetupSubraceSwitch("illithid", "mindbreaker_telephathest_darkmoon", 32, TRUE); SetupSubraceSwitch("illithid", "greatone", 40, FALSE); Where: vampire, wolkier, pixie, shadow, air-genasi, underminion, mindbreaker, telephathest, darkmoon, and greatone are all subraces. Note: In order for this to work the subrace you wish to switch the player to does NOT have to be marked as prestigious. AddSubraceItem() Give the player belonging to a subrace, additional unique items This allows you to give players belonging to a subrace additional unique items, at any level. (Use as many times as desired for any levels) Syntax: void AddSubraceItem(string subrace, string ItemResRef, int Level = 1); subrace: Should be the same as the Subrace's name used in CreateSubrace() ItemResRef: The blueprint res-ref of the item to give. Level: The level at which to give the item. Example: Say I wanted to give my players belonging to the vampire subrace, an armour and a scythe at level 2. And then an amulet at level 10. The armor's resref is: "sha_vamp_arm" The scythe's resref is: "sha_vamp_scythe" The amulet's resref is: "sha_vamp_ammy" So I simply call: AddSubraceItem("vampire", "sha_vamp_arm", 2); AddSubraceItem("vampire", "sha_vamp_scythe", 2); AddSubraceItem("vampire", "sha_vamp_ammy", 10); NOTE: You can only give ONE item of each. IE: You CAN'T do this expecting to give 2 amulets: AddSubraceItem("vampire", "sha_vamp_ammy", 10); AddSubraceItem("vampire", "sha_vamp_ammy", 10); SSE_HorseAddHorseMenu() Gives the 169 horse menu feat to oPC's hide. Syntax: void SSE_HorseAddHorseMenu(object oPC) object oPC: The PC who's hide to give 169 horse menu feat.